<?php
/**
 * 项目：Pixiv每日排行榜Top50小部件
 * 首页：http://git.oschina.net/mokeyjay/Pixiv-daily-top50-widget
 * 作者：超能小紫(mokeyjay)
 * 博客：http://www.mokeyjay.com
 *
 * 可随意修改、二次发布。但请保留上方版权声明及注明出处
 */

/**
 * 配置区
 */

// 背景颜色。默认值为ffffff（纯白色）。你也可以通过get方式传参来设置
$backgroud_color = isset($_GET['color']) ? substr($_GET['color'], 0, 6) : 'eeeeee';
// 图片数量限制（范围1-50）
// 例如将此值设为10则可以做出Top10的效果
// 防止部分辣鸡主机在每日第一次执行（缓存图片）时占用过多资源导致卡死或报警
// 一般情况下默认的50就行
$limit = isset($_GET['limit']) ? (int)$_GET['limit'] : 50;


// 将缩略图缓存至服务器本地，加快(?)缩略图的加载速度
// 此值为false时无需继续填写下面的配置项
$download = FALSE;
// 清空旧的缓存文件
$clear_overdue = TRUE;
// 缩略图缓存路径及url（必须以/结尾）
$image_path = 'image/';
// 缩略图缓存url（必须以/结尾）
$image_url = 'http://localhost/cloud/pixiv/image/';

/**
 * 配置区结束
 *
 * 请勿随意修改下方代码，除非你知道你在做什么
 */

error_reporting(0);
$update = TRUE; // 需要更新

if(file_exists('pixiv.json')){
    $data = @file_get_contents('pixiv.json');
    $data = json_decode($data, TRUE);
    // 今天更新过，无需再次更新
    if(isset($data['date']) && $data['date'] == date('Y-m-d')) $update = FALSE;
}

// 开始更新
if($update){

    if(function_exists('set_time_limit')) set_time_limit(0);
    $html = curl_get('http://www.pixiv.net/ranking.php?mode=daily&content=illust');

    // 匹配缩略图url
    preg_match_all('|http://i\d\.pixiv\.net/c/240x480/img-master/img/\d{4}/\d{2}/\d{2}/\d{2}/\d{2}/\d{2}/(.*?\.\w{3})|', $html, $image);
    // 匹配链接
    preg_match_all('|member_illust.php\?mode=medium&amp;illust_id=\d+&amp;ref=rn-b-\d+-title-\d&amp;uarea=daily|', $html, $url);

    // 缓存缩略图
    if($download){
        @mkdir($image_path, 0777, TRUE);
        if(!is_writable($image_path)) exit("'{$image_path}' not exists or not writable");
        // 清空缓存
        if($clear_overdue){
            $dir = trim($image_path, '/');
            if($dh = opendir($dir)){
                while(($file = readdir($dh)) !== FALSE){
                    if($file == '.' || $file == '..') continue;
                    @unlink($dir . '/' . $file);
                }
            }
        }
        // 缓存缩略图
        foreach ($image[0] as $k=>$v){
            if($k >= $limit) break;
            @file_put_contents($image_path.$image[1][$k], curl_get($v));
            $image[0][$k] = $image_url . $image[1][$k];
        }
    }

    // 缓存url
    $data = array('date'=>date('Y-m-d'), 'image'=>$image[0], 'url'=>$url[0]);
    @file_put_contents('pixiv.json', json_encode($data));
}

/**
 * CURL读取数据
 * @param $url
 * @return mixed
 */
function curl_get($url){
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array());
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
?>

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Pixiv每日榜Top50挂件</title>

    <link href="//cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
    <style>
        html,body,#carousel-example-generic,.carousel-inner,.item,.item div{ height :100%;}
        .item{background-color: #<?=$backgroud_color?>;}
        .item div{background-position: center; background-repeat: no-repeat; background-attachment: fixed;}
        .carousel-caption{position: static}
        .carousel-control.left,.carousel-control.right{background: none;}
    </style>
</head>
<body>
<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">

    <div class="carousel-inner" role="listbox">
        <?php foreach ($data['image'] as $k=>$v): ?>
            <?php if($k >= $limit) break; ?>
            <div class="item <?php if($k==0) echo 'active'; ?>">
                <a href="http://www.pixiv.net/<?= $data['url'][$k] ?>" target="_blank">
                    <div class="carousel-caption" style="background-image: url(<?=$v?>)"> </div>
                </a>
            </div>
        <?php endforeach; ?>
    </div>

    <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
        <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
        <span class="sr-only">Previous</span>
    </a>
    <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
        <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
        <span class="sr-only">Next</span>
    </a>
</div>
</body>
</html>
<script src="//cdn.bootcss.com/jquery/1.12.1/jquery.min.js"></script>
<script src="//cdn.bootcss.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>